/*
 * @Author: quit
 * @Date: 2021-11-09 16:01:11
 * @LastEditTime: 2021-12-29 16:07:30
 * @Descripttion: 权限拦截,项目权限配置,以及路由拦截使用路由的导航守卫
 */
import router from './router' // 路由
import store from './store' // VueX实例
import NProgress from 'nprogress' // 页面加载进度条
import 'nprogress/nprogress.css'
import { Notification } from 'element-ui'

const whiteList = ['/login', '/404'] // 不需要token的页面(白名单页面,配置时请查看路由表)

// 路由前置守卫 to 路由传入 from 路由传出 next 放行回调(不执行页面会挂掉,next()放行,next(fasle)取消跳转,next(地址)跳转至某个地址)
router.beforeEach(async (to, from, next) => {
    NProgress.start()
    //  有无token判断
    if (store.getters.token) {
        if (to.path === '/login') {
            // 如果用户已经登录(token存在),则进入主页
            Notification({
                title: '提示',
                type: 'warning',
                position: 'bottom-right',
                duration: 3000,
                dangerouslyUseHTMLString: true,
                message: '手动跳转失败,您当前已登录',
                showClose: true
            })
            next('/')
        } else {
            // 存在则直接放行,并根据有无用户资料进行获取
            // if (!store.getters.userId) {
            //   await store.duspatch('user/VueXgetUserInfo')
            // }
            next()
        }
    } else {
        if (whiteList.indexOf(to.path) > -1) {
            // 进入表示跳转地址为白名单,不能进入跳转至登录页
            next()
        } else {
            Notification({
                title: '提示',
                type: 'warning',
                position: 'bottom-right',
                duration: 3000,
                dangerouslyUseHTMLString: true,
                message: '您还未登录,请您先登录在继续浏览',
                showClose: true
            })
            next('/login')
        }
    }
    NProgress.done()
})

// 路由后置守卫
router.afterEach(() => {
    NProgress.done()
})
